<?php

require_once("../dao/database.php");
require_once('../domain/User.php');
require_once('../util/main.php');
require_once("../util/Validation.php");
require_once("../dao/user_db.php");
require_once("../email/MailService.php");


session_start();

$user = $_SESSION[Constants::SESSION_USER];

// Get the action to perform
if (isset($_POST['submit'])) {
    $action = 'submit_edit';
} else {
    $action = 'show_user';
}


$val = new Validation();
$infoMessage = '';

if ($action == 'submit_edit') {
    /*
     * Validation Statigie mit command pattern hinzufügen.
     */

    // Profildaten aus $_POST auslesen
    $vorname = $val->validateRequiredString('vorname', "Der Vorname ist ein Pflichtfeld.");
    $nachname = $val->validateRequiredString('nachname', "Der Nachname ist ein Pflichtfeld.");
    $plz = $val->validateRequiredString('plz', "Die Postleitzahl ist ein Pflichtfeld.");
    $ort = $val->validateRequiredString('ort', "Der Ort ist ein Pflichtfeld.");
    $strasse = $val->validateRequiredString('strasse', "Die Straße ist ein Pflichtfeld.");
    $geschlecht = $val->validateRequiredString('geschlecht', "Das Geschlecht ist ein Pflichtfeld.");
    $alter = $val->validateAge('alter', "Die Geburtsjahr ist ein Pflichtfeld.");
    $email = $val->validateRequiredString('email', "Die E-Mail Adresse ist ein Pflichtfeld.");
//    $email2 = $val->validateRequiredString('email2', "Die E-Mail Adresse (Wiederholung) ist ein Pflichtfeld.");
    $nickname = $val->validateRequiredString('nickname', "Der Nickname ist ein Pflichtfeld.");
    $password = $val->validateString('password');
    $password2 = $val->validateString('password2');
    $newsletter =  (string) $val->validateRequiredBoolean('newsletter', "Entscheidung für den Newsletter ist ein Pflichtfeld.");

    $val->compairString($password, $password2, '\'Passwort\'', '\'Passwort (Wiederholung)\'');
//    $val->compairString($email, $email2, '\'E-Mail Adresse\'', '\'E-Mail Adresse (Wiederholung)\'');

    $val->valid_email($email, 'Das E-Mail Format stimmt nicht!');

    $fehler = 0;

    // Die Profildaten in der Datenbank aktualisieren
    if (!$val->isError()) {
        if (strcmp($nickname, $user->getNickname()) != 0){
           //nickname hat sich geändert:
            if (!isNicknameUnique($nickname)) {
                $val->addError('Der Username (Nickname) wurde bereits verwendet!');
            }
        }

        if (!$val->isError()) {

            $updateWithPW = false;

            if ($password != '') {
                $password = hash('sha256', $password);
                //write DB
                update_user_with_pw($user, $alter, $nickname, $ort, $strasse, $geschlecht, $nachname, $password, $vorname, $plz, $email, $newsletter);
                $updateWithPW = true;
            } else {
                //write DB
                update_user($user, $alter, $nickname, $ort, $strasse, $geschlecht, $nachname, $vorname, $plz, $email, $newsletter);
            }
            //update User in Session
            $users = findUserByNicknameAndEmail($nickname, $email);
            $user = $users[0];
            $_SESSION[Constants::SESSION_USER] = $user;
            
            $infoMessage = 'Ihr Profile wurde erfolgreich geändert.';
            include('successUserEdit.php');
        } else {
            include('editUserView.php');
        }
    } else {
        include('editUserView.php');
    }
} // Ende Prüfung auf übermitteltes Formular
else {
    //Laden der Userdaten aus der Session
    $vorname = $user->getVorname();
    $nachname = $user->getNachname();
    $plz = $user->getPlz();
    $ort = $user->getOrt();
    $strasse = $user->getStrasse();
    $geschlecht = $user->getGeschlecht();
    $alter = $user->getAlterskategorie();
    $email = $user->getEmail();
    $nickname = $user->getNickname();
    $newsletter = $user->getNewsletter();
    $password = '';

    include('editUserView.php');
}
?>
